package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Collections;

import Datenbankhandler.DBConn;
import bean.Benutzer;

import interfacedao.IUserDAO;

public class UserDAO implements IUserDAO {
	private PreparedStatement ps;

	public UserDAO() {
		ps = null;
		System.out.println("Bin in USERDAO userdao");
	}

	@Override
	public void benutzerErstellen(Benutzer u) {

		Connection conn = DBConn.getConnection();
		String eingabe = "INSERT INTO benutzer(Vorname,Nachname,Benutzername,Password,Adresse,KontoNR,BLZ,Email,Status) VALUES(?,?,?,?,?,?,?,?,?)";
		System.out.print("bin in UserDAO");
		try {
			System.out.println("Bin in der try");
			ps = conn.prepareStatement(eingabe);
			ps.setString(1, u.getVorname());
			ps.setString(2, u.getNachname());
			ps.setString(3, u.getBname());
			ps.setString(4, u.getPw());
			ps.setString(5, u.getAdresse());
			ps.setString(6, u.getKnr());
			ps.setString(7, u.getBlz());
			ps.setString(8, u.getEmail());
			ps.setString(9, u.getStatus());

			ps.executeUpdate();
			System.out.println("Benutzer wurde erstellt.");

			DBConn.closeConnection();

		}

		catch (SQLException e) {

			System.out.println("Error");

		}

	}
@Override
	public int benutzerStatistik(String bname, String status) {

		String sql = "select Bieterpreis from Artikel where Bieter='" + bname
				+ "' and Lebensdauer=0";
		String sql2 = "select Bieterpreis from Artikel where Anbieter ='"
				+ bname + "' and Lebensdauer =0";
		int preis = 0;

		if (status.equals("k")) {
			try {
				Connection conn = DBConn.getConnection();
				Statement st = conn.createStatement();
				ResultSet rs = st.executeQuery(sql);
				while (rs.next()) {
					int a = rs.getInt(1);
					preis = preis + a;
					System.out.println(preis);
				}
			} catch (SQLException e) {
				e.printStackTrace();
				System.out.println("Statistik nicht verfügbar");
			}
		}

		else {
			try {

				Connection conn = DBConn.getConnection();
				Statement st = conn.createStatement();
				ResultSet rs = st.executeQuery(sql2);
				while (rs.next()) {
					int a = rs.getInt(1);
					preis = preis + a;
					System.out.println(preis);
				}
			} catch (SQLException e) {
				e.printStackTrace();
				System.out.println("Statistik nicht verfügbar");
			}
		}

		return preis;
	}
@Override
	public boolean checkUsername(String bname) {

		boolean ok = false;

		Connection conn = DBConn.getConnection();
		String sql = "SELECT Benutzername FROM benutzer WHERE Benutzername ='"
				+ bname + "'";
		try {
			ps = conn.prepareStatement(sql);
			ps.setString(1, bname);
			ResultSet rs = ps.executeQuery();
			ok = rs.next();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		DBConn.closeConnection();
		return ok;

	}

	@Override
	public String[] benutzerAnmelden(String bnamee, String pww) {
		System.out.println("Bin in benutzernamelden");

		String ausgabe = " ";
		String status = " ";
		System.out.println(bnamee);
		System.out.println(pww);
		try {
			Connection conn = DBConn.getConnection();
			Statement st = conn.createStatement();
			ResultSet rs = st
					.executeQuery("select Benutzername,Password,Status from benutzer where Benutzername='"
							+ bnamee + "'");

			if (rs.next()) {

				if (rs.getString(2).equals(pww)) {
					ausgabe = "korrekt";
					if (rs.getString(3).equals("v")) {
						status = "v";
					} else if (rs.getString(3).equals("k")) {
						status = "k";

					}
				}

				else if (!(rs.getString(2).equals(pww))) {
					ausgabe = "fehler";
				}

				else if (!(rs.next())) {
					ausgabe = "fehler";
				}
			}
		}

		catch (Exception ex) {
			System.out.println(ex);
		}
		DBConn.closeConnection();
		String[] array = { ausgabe, status };

		return array;

	}
@Override
	public int benutzerStatistikAlle(String bname) {

		String sql = "select ID from Artikel where Bieter='" + bname
				+ "' and Lebensdauer=0";
		int a = 0;
		try {
			Connection conn = DBConn.getConnection();
			Statement st = conn.createStatement();
			ResultSet rs = st.executeQuery(sql);
			while (rs.next()) {
				a++;

			}
		} catch (SQLException e) {
			e.printStackTrace();
			System.out.println("Statistik nicht verfügbar");
		}

		return a;
	}
	
@Override
public int[] benutzerStatistikBewertung(String bname, String a){
	int[] ausgabe={0,0};
	int plus=0;
	String sql="select Anbieterbewertung from Artikel where Anbieter='" + bname + "'";
	String sql2="select Bieterbewertung from Artikel where Bieter='" + bname + "'";
	int counter=0;
	if(a.equals("v")){
		try{
		Connection conn=DBConn.getConnection();
		Statement st=conn.createStatement();
		ResultSet rs=st.executeQuery(sql);
		while(rs.next()){
			if(rs.getInt(1) == 0){
				System.out.println("yo es ist next");
				
			}
			else {
			System.out.println("yo klappt eh");
			counter=counter+1;
			int b = rs.getInt(1);
			plus=plus+b;
			}
		}
		}
		catch(SQLException e){
		e.printStackTrace();
	}
		
		
		
	}
	else {
		try{
			Connection conn=DBConn.getConnection();
			Statement st=conn.createStatement();
			ResultSet rs=st.executeQuery(sql2);
			while(rs.next()){
				if(rs.getInt(1) == 0){
					
					System.out.println("yo es ist next");
				}
				else{
					System.out.println("yo klappt eh");
				counter=counter+1;
				int b=rs.getInt(1);
				plus=plus+b;
			}
			}
		}
		catch(SQLException e){
			e.printStackTrace();
		}
	}
	if(plus==0){
		ausgabe[0] = 0;
		ausgabe[1] = 0;
	}
	else{
		
	
	ausgabe[0] = plus;
	ausgabe[1]= counter;
	}
	System.out.println(ausgabe[0] + " " + ausgabe[1]);
	return ausgabe;
}
	

	@Override
	public boolean bieterBewerten(int id, String anbieter, String bieter,
			int bewertung) {

		System.out.println("Bin in anbieterbewerten oida");
		String eingabe = "select Anbieterbewertung from Artikel where ID='"
				+ id + "'";
		String eingabe2 = "update Artikel set Anbieterbewertung='" + bewertung + "' where ID='" + id +"'";
		boolean okay=false;
		try {
			Connection conn = DBConn.getConnection();
			Statement st = conn.createStatement();
			ResultSet rs = st.executeQuery(eingabe);
			rs.next();
			int a = rs.getInt(1);

			if (a == 0) {

				st.executeQuery(eingabe2);

				
				System.out.println("Bewertung abgegeben");

				DBConn.closeConnection();

				System.out.println(a);
				okay=true;
			} else {
				okay=false;
			}
		}

		catch (SQLException e) {

			e.printStackTrace();

		}
return okay;
	}

	@Override
	public boolean anbieterBewerten(int id, String anbieter, String bieter,
			int bewertung) {
		System.out.println("Bin in Bieter bewerten oida");
	
		String eingabe = "select Bieterbewertung from Artikel where ID='"
				+ id + "'";
		String eingabe2 = "update Artikel set Bieterbewertung='" + bewertung + "' where ID='" + id +"'";
		boolean okay=false;
		try {
			Connection conn = DBConn.getConnection();
			Statement st = conn.createStatement();
			ResultSet rs = st.executeQuery(eingabe);
			rs.next();
			int a = rs.getInt(1);

			if (a == 0) {

				st.executeQuery(eingabe2);

				
				System.out.println("Bewertung abgegeben");

				DBConn.closeConnection();

				System.out.println(a);
				okay=true;
			} else {
				okay=false;
			}
		}

		catch (SQLException e) {

			e.printStackTrace();

		}
return okay;
	
	}

}
